/**
 * .addTouch();
 *
 * .addTouch is a plugin for jQuery to convert touch events into simulated mouse events
 * Most of jQuery UI is supported. See the proof of concept here: http://spaceyraygun.net/mobile/jquery-ui-iphone.html
 * The original code was altered slightly because it would simulate mouse events on every
 * element which blocked native events like scrolling and zooming.
 *
 * To use this, simply call .addTouch() to a jQuery object and the events will be attached to those results only.
 *
 * @plugin_author: jason kuhn (http://jasonkuhn.net)
 * @demo: http://jasonku.hn/mobile/jqui/
 * @original_author: ross boucher (http://rossboucher.com/2008/08/19/iphone-touch-events-in-javascript/)
 */
;(function($){
	$.iPhone = {
		init: function(){
			$(window).on('orientationchange', $.iPhone.updateOrientation);
			this.updateOrientation();
			//$('body').css({'min-height':'420px','min-width': '320px'});
		},
		orientation: 'portrait',
		updateOrientation: function(){
			var wo = window.orientation;
			this.orientation = (wo === 0 || wo == null || wo === 180) ?  'portrait' : 'landscape';
			$('body').attr('orient', this.orientation);
			setTimeout($.iPhone.hideURL,100);
		},
		hideURL: function(){
			window.scrollTo(0, 1);
			setTimeout(function(){ window.scrollTo(0, 0); }, 0);
		},
		preloadImages: function(images){ $(images).each(function(key,val){(new Image()).src = val; }); }
	};

	$.fn.addTouch = function(){
		var handleTouch = function(event){
			var touches=event.changedTouches, first=touches[0], type='', simulatedEvent=document.createEvent('MouseEvent');
			switch(event.type){
				case 'touchstart': type = 'mousedown'; break;
				case 'touchmove': type = 'mousemove'; break;        
				case 'touchend': type = 'mouseup'; break;
				default: return;
			}
			simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, 
				first.clientY, false, false, false, false, 0/*left*/, null);
			first.target.dispatchEvent(simulatedEvent);
			event.preventDefault();
		};

		//we pass the original event object because the jQuery event object is normalized to w3c specs and does not provide the TouchList
		return this.each(function(i,el){
			$(el).on('touchstart touchmove touchend touchcancel', function(){ handleTouch(event); });
		});
	};
})(jQuery);

$(function(){ $.iPhone.init(); });